#if !defined(__APP_DEVICE_H)
#define __APP_DEVICE_H
#include "app_buffer.h"
#include <pthread.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include "log/log.h"
#include "app_pool.h"
#include "app_mqtt.h"
#include "app_message.h"
#include "app_common.h"
#include  "stdlib.h"

typedef struct 
{
    char *filename;//设备文件名 (蓝牙)
    int fd;//设备文件描述符
    Buffer *up_buffer;//上行缓冲区
    Buffer *down_buffer;//下行缓冲区
    pthread_t  read_thread;//读线程
    int is_running;//是否运行
    long last_write_time;//最后一次写入时间
    int (*post_read)(char *data, int len);//读后处理函数 =》将读取的数据转换为字符数组消息
    int (*pre_write)(char *data, int len);//写前处理函数 => 将字符数组消息转换为要写入格式的数据

}device_t;

/**
 * @brief 设备初始化
 * 
 * @param filename 
 * @return int 
 */
device_t *app_device_init(char *filename);

/**
 * @brief 启动设备
 * 
 * @return int 
 */
int app_device_start(void);

/**
 * @brief 销毁设备
 * 
 * @return int 
 */
int app_device_destroy(void);

#endif // __APP_DEVICE_H